LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.numeric_std.all;
use ieee.std_logic_signed.all;


ENTITY fc_toSpeed IS
  PORT( 
  clk : IN STD_LOGIC;
  clr : IN STD_LOGIC;
  rst : IN STD_LOGIC;
  start : IN STD_LOGIC;
  ready_2 : OUT STD_LOGIC;
  speedOut : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
  timeIn : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
  conv_time : OUT std_logic
  );
END ENTITY fc_toSpeed;



ARCHITECTURE v OF fc_toSpeed IS
SIGNAL timeReg: STD_LOGIC_VECTOR(63 DOWNTO 0);
CONSTANT r_dist : integer := 21545;
SIGNAL r_speed: integer ;
SIGNAL r_time : integer;


BEGIN
  --
  -- Conv_Time moet altijd op '0' staan
  -- Deze wordt in de double dabble gebruikt
  --
conv_time <= '0';

  --
  -- Proces voor het berekenen van de snelheid in km/h
  --
  PROCESS (clk, rst) BEGIN

  --
  -- Bij een reset moeten alle waardes op '0' staan
  --

    IF rst ='1' THEN
      speedOut <= (OTHERS => '0');
      ready_2<= '0';
    ELSIF rising_edge(clk) THEN
      IF clr = '1' THEN
        speedOut <= (OTHERS => '0');
        ready_2<= '0';
      ELSIF start = '1' THEN

  --
  -- De start zit vast aan de delta_t_strobe
  -- de conversie moet worden gestart als er een nieuwe waarde wordt doorgegeven
  -- 
  -- De tijd wordt in een integer ingeladen
  -- dan wordt de omtrek van het wiel gedeeld door de tijd v/e omtrek
  -- Deze wordt dan vermenigvuldigd met 360
  --	*   3.6 om van m/s naar km/h te gaan
  --	* 100   om het kommagetal weg te werken
  -- Daarna wordt dit getal omgezet in een 64-bits vector 
  -- en wordt de ready_2 1 klok-cycle op '1' gezet, 
  -- hierdoor weet de double-dabble dat de conversie gestart moet worden
  -- de vector die uit de double-dabble komt, wordt in de 7 segmen displays geladen
  --

        r_time <= CONV_INTEGER(timeIn(63 DOWNTO 0));
        r_speed <= r_dist/ r_time;
        r_speed <= r_speed * 360;
        
        speedOut <= CONV_STD_LOGIC_VECTOR(r_speed,64); 
        ready_2<= '1';
      ELSE
        ready_2<='0';
      END IF;

    END IF;
  END PROCESS;
    
 
    
  END ARCHITECTURE v;